let cacheD2Data = []
let cacheD1Item = null
let cacheD2RowLength = 0
let _fenliuLock = 0
let _datas = {}
let currentRow = -1;
let shangRow = -1
$NG.AllReady(function (editPage, { useUpdateRows, useValuesChange, useUpdateRow, useDataIndexChange, useClick }) {
    var mstform = $NG.getCmpApi('p_form_gzdyqd'); //获取表头数据
    var dgrid1 = $NG.getCmpApi('p_form_gzdyqd_d'); //工作单元
    var dgrid2 = $NG.getCmpApi('p_form_gzdyqd_d1'); //设备清单

// 方法内缓存 
let LockMap = {
    _d2AddBtn : false,
    set d2AddBtn(value){
          //表体按钮置灰
          $NG.getCmpApi("toolbar_p_form_gzdyqd_d1").getItem("addrow").setDisabled(value);
        this._d2AddBtn = value
    },
    get d2AddBtn(){
        return this._d2AddBtn
    }
}


    {//初始化逻辑BEGIN
        if (mstform.getItem('phid_pc').getValue()) {
            cntMFilter();
            getPtInfoByPhid();
        };
    }//初始化逻辑END
    {//表头字段变化逻辑BEGIN
        useValuesChange(({ args }) => {
            cntMFilter();
            getPtInfoByPhid();
        }, 'p_form_gzdyqd.phid_pc');
        useValuesChange(({ args }) => {
            getCntMInfoByPhid();
        }, 'p_form_gzdyqd.u_cnt');

    }//表头字段变化逻辑END



    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    function getPtInfoByPhid() {
        if (mstform.getItem('phid_pc').getValue()) {
            $NG.execServer('getPtInfoByPhid', { phid: mstform.getItem('phid_pc').getValue() }, function (res) {
                const datas = JSON.parse(res.data)[0].extendObjects;
                console.log(datas);
                //帮助字段赋值
                $NG.updateState((updater) => {
                    updater.data.p_form_gzdyqd.setProps({
                        u_pc_no: datas.pc_no//项目编码
                        , u_sqgw: {//售前顾问
                            value: datas.user_sqgw_phid,
                            label: datas.user_sqgw_name,
                        },
                        u_xmjl: {//项目经理
                            value: datas.project_manager_phid,
                            label: datas.project_manager_name,
                        },
                        u_khjl: {//客户经理
                            value: datas.project_manager_phid,
                            label: datas.project_manager_name,
                        },
                    });
                });

            });
        }
    }

    function cntMFilter() {
        $NG.updateUI((updater, state) => {
            updater.fieldSetForm.p_form_gzdyqd.u_cnt.setProps({
                onBeforeOpen: async () => {
                    var phid_pc = mstform.getItem('phid_pc').getValue();
                    if (!phid_pc) {
                        $NG.alert("请先选择项目");
                        return false;
                    } else {
                        return true;
                    }
                },
                ...(!!mstform.getItem('phid_pc').getValue() && {
                    clientSqlFilter: {
                        bill_type: 4,//合同类型1:承包合同|4:分包合同;
                        phid_pc: mstform.getItem('phid_pc').getValue()
                    }
                }),
            });
        });
    }

    function getCntMInfoByPhid(params) {
        $NG.execServer('getCntMInfoByPhid', { phid: mstform.getItem('u_cnt_no').getValue() }, function (res) {
            const datas = JSON.parse(res.data)[0].extendObjects;
            console.log(datas);
            $NG.updateState((updater) => {
                updater.data.p_form_gzdyqd.setProps({
                    pcm_no: datas.pcm_no//合同编码
                    , u_kh_name: {//甲方单位
                        value: datas.customer_id,
                        label: datas.customer_name,
                    },
                });
            });

        });
    }

setTimeout(()=>{
    console.log(`开始触发`);
    const button = document.getElementById('toolbar_top');

        // 创建鼠标点击事件对象
        const clickEvent = new MouseEvent('click', {
            bubbles: true,
            cancelable: true,
            // 假设这里添加自定义的origin属性，根据实际需求设置其值
            originid: 'save'
        });
        Object.defineProperty(clickEvent, 'originid', {
            value: 'save',
            enumerable: true
        });
        button.dispatchEvent(clickEvent);
},5000)

    // 点击明细过滤明细模块
    // 手动监听是否有多选
    setInterval(()=>{
        const _arr = dgrid1.getRows()
        let i = 0;
        _arr.forEach(item=>{
            if(item.checked){
                i++
            }
        })
        if(i>1){
            $NG.alert("请不要进行多选，您可以单击行进行单选")
            saveCahe()
            dgrid1.clearSelected()
            cacheD1Item = null
            LockMap.d2AddBtn = true
        } else if(i==1) {
            LockMap.d2AddBtn = false
        } else if(i==0&&!LockMap.d2AddBtn){
            LockMap.d2AddBtn = true
        }
    },100)
    useUpdateRows(({args})=>{
        console.log(`测试`, dgrid2.getRow(0));
        // clearTimeout(_fenliuLock)
        // // TODO deep对象分流
        // _fenliuLock = setTimeout(()=>{
        //     console.log(`开始deep`, cacheD2Data)
        //     cacheD2Data = deepClone(dgrid2.getRows())
        // },600)
        addFirstID()
        if(args[0].length !== cacheD2RowLength){
            cacheD2RowLength = args[0].length
            args[0].forEach(item=>{
                if(!item.u_gzdy_code){
                    item.u_gzdy_code = cacheD1Item.u_gzdy_code
                }
            })
            dgrid2.refreshView()
        }
        console.log(`监听子表体`, args,cacheD2Data);
    }, "p_form_gzdyqd_d1")

    // 监听表体的编辑
    useUpdateRow(({args})=>{
        console.log(`d1表编辑监听`);
        currentRow=args[0].u_gzdy_code
    }, "p_form_gzdyqd_d")

    // useClick(async function ({ args }) {
    //     //按钮点击事件
    //     if(args[0].containerId == 'p_form_gzdyqd_d'){
    //         console.log("deleterow按钮点击",args,dgrid2.getRows());

    //     }
    // }, "deleterow");
    // d1表体点击删行触发
    useClick(async function ({ args }) {
        //按钮点击事件
        if(args[0].containerId == 'p_form_gzdyqd_d'){
            console.log("deleterow按钮点击",args,dgrid2.getRows());
            _datas[currentRow]=[]
            shangRow = -1
            currentRow = -1
            dgrid2.clearRows()
        }
    }, "deleterow");




//d表点击
dgrid1.subscribe(function ({ rowIndex, table }) {
    console.log(`点击行监听数据`, table,rowIndex);
    cacheD1Item = dgrid1.getRow(rowIndex)
    LockMap.d2AddBtn = false
    const key_code = table.getSelectedRow().u_gzdy_code
    if(key_code!==currentRow){
    shangRow = currentRow
    currentRow = key_code
    console.log(`查看缓存数据`, _datas);
    setTimeout(()=>{
        if(shangRow!==-1){
            _datas[shangRow] = deepClone(dgrid2.getRows())
            dgrid2.clearRows()
        }
    },50)
    setTimeout(()=>{
        if(_datas[currentRow]){
            dgrid2.clearRows()
            console.log(`检查`,_datas[currentRow]);
            dgrid2.addRows(_datas[currentRow])
        }
    },100)
    }
}, 'clickHighlight');

  //点击子行触发(点击多选框无法触发)
  dgrid2.subscribe(function ({ rowIndex, table }) {
    console.log(`点击行监听数据`, table,rowIndex);
}, 'clickHighlight');
  // 给每一行添加一个唯一id
    function addFirstID(){
        const dg2row = dgrid2.getRows()
        dg2row.forEach(item=>{
            if(!item.first_id){
                item.first_id = new Date().getTime()
            }
        })
    }
    function filterD2RowInfo(){
        const _arr = []
        cacheD2Data.forEach(item=>{
            if(item.u_gzdy_code==cacheD1Item.u_gzdy_code){
                _arr.push({...item})
            }
        })
        // _deepLock = false
        dgrid2.clearRows()
        dgrid2.addRows(_arr)
        // _deepLock
    }
    // 报错保存
    function saveCahe(){
        shangRow=-1
        const _arr = dgrid2.getRows()
        _datas[currentRow]= deepClone(_arr)
        currentRow=-1
        dgrid2.clearRows()
    }
    // 对象的深复制
    function deepClone(obj) {
        // 检查是否是对象或数组
        if (obj === null || typeof obj !== 'object') {
            return obj; // 基本数据类型直接返回
        }
    
        // 创建数组或对象的副本
        const copy = Array.isArray(obj) ? [] : {};
    
        for (const key in obj) {
            if (obj.hasOwnProperty(key)) {
                // 递归调用进行深拷贝
                copy[key] = deepClone(obj[key]);
            }
        }
    
        return copy;
    }
});